package jml.plugins.justadded;

import java.util.Comparator;

import jml.def.Filter;
import jml.def.Label;
import jml.def.Library;
import jml.def.Plugin;
import jml.def.Title;
import jml.defaultimple.FilterImple;
import jml.defaultimple.LabelImple;
import jml.defaultimple.TitleImple;
import jml.defaultimple.util.UDate;

public class JustAdded extends Plugin
{
	private ProcessSplit processSplit = null;
	private String toSplit = null;
	private int nDays=0;

	@Override
	public void beforeLoading(Library lib)
	{
		// limite maximo de dias que voy a exponer el disco
		nDays = Integer.parseInt(getParameters().get("nDays"));
		
		// cadena con los sublablels
		toSplit = getParameters().get("split");
		
		// tokenizo la cadena y agrego los sublabels al label del plugin
		processSplit = new ProcessSplit(nDays,toSplit);	
		
		LabelImple plgLabel = (LabelImple)getPluginLabel();
		FilterImple plgFilter = (FilterImple)getPluginFilter();
		
		for(String s:processSplit.getSplitted())
		{
			LabelImple lbl = new LabelImple();
			lbl.setName(s);
			plgFilter.addLabel(lbl);
			plgFilter.excludeLabel(s);
			plgLabel.addSublabel(s);
		}
	}	
	
	@Override
	public void onLoad(Title t)
	{	
		// fecha de hoy
		String hoy = UDate.now();
		
		// fecha del titulo (si no (la tiene => la agrega)
		String titleDate = _processTitleDate(t);
		
		// diferencia en dias entre ambas fechas
		int difDias = UDate.daysBetween(hoy, titleDate);
		
		// si excede la cantida de dias => no hay nada que hacer...
		if( difDias > nDays )
		{
			return;
		}

		// ---
		// --- PROCESO --->
		// ---

		FilterImple pluginFilter = (FilterImple)getPluginFilter();
		
		// a que label corresponde esta diferencia de dias?
		String sLabel = processSplit.getLabelForDiff(difDias);
				
		// lo agrego al label correspondiente
		pluginFilter.getLabel(sLabel).addTitle(t);
	}

	@Override
	public void onPlay(Title t)
	{
	}

	@Override
	public void onEdit(Title t)
	{		
	}

	@Override
	public void onRefresh(Library t)
	{
	}

	@Override
	public void afterLoading(Library lib)
	{
	}

	private String _processTitleDate(Title t)
	{
		String titleDate = t.loadPrivateCookie("fechaAlta",getClass());
		if( titleDate==null )
		{
			titleDate = UDate.now();
			t.storePrivateCookie("fechaAlta", titleDate,getClass());
		}
		
		return titleDate;
	}
	
	class ComparatorTitle implements Comparator<Title>
	{
		@Override
		public int compare(Title o1, Title o2)
		{
			String d1 = o1.loadPrivateCookie("fechaAlta",getClass());
			String d2 = o2.loadPrivateCookie("fechaAlta",getClass());
			
			if( d1.compareTo(d2)==0 )
			{
				return o1.getId().compareTo(o2.getId());	
			}
			else
			{
				return -1*d1.compareTo(d2);
			}
		}
	}
	
	@Override
	public void onOpenLabel(String filter, String label)
	{
	}
}
